/*
	File: ITask.h
	Desc: Task interface
*/

#pragma once

#include <string>
#include "IDate.h"

class ITask
{
public:
    ITask() {}
	virtual ~ITask() {}

public:
	// Attribute
	virtual void        setName(std::string name)      = 0;
	virtual std::string getName() const                = 0;
    
    virtual void        setImportance(int im) = 0;
    virtual int            getImportance()const = 0;

	virtual void        addLabel(std::string label)    = 0;
	virtual void        setLabel(std::string label)    = 0;
	virtual int         deleteLabel(std::string label) = 0;
    virtual std::string getLabel()const = 0;

	virtual void        setStartDate(IDate& date)      = 0;
	virtual void        setEndDate(IDate& date)        = 0;
    virtual IDate*      getStartDate()const = 0;
    virtual IDate*      getEndDate()const   = 0;
	virtual ITask*      find(std::string name)         = 0;
    virtual ITask*      find(int index) = 0;
	virtual int         add(ITask* task)               = 0;
	virtual int         remove(ITask* task)            = 0;

	virtual void		   setNext(ITask* task)        = 0;
	virtual void		   setPre(ITask* task)         = 0;
	virtual const ITask* getNext() const			   = 0;
	virtual const ITask* getPre() const				   = 0;
	virtual void setRemarks(std::string remarks)       = 0;
	virtual std::string    getRemarks() const          = 0;
	virtual bool        operator==(ITask& t)           = 0;

	virtual void          Rank() = 0;
	virtual void		  emerRank() = 0;
	virtual void		  imRank() = 0;
	virtual void          swap(ITask* t) = 0;
	virtual double		  emergency(ITask* t) = 0;

};

